package models

import (
	"time"

	"gorm.io/gorm"
)

// KnowledgeAgent 知识百科Agent模型
type KnowledgeAgent struct {
	ID          uint   `json:"id" gorm:"primarykey"`
	Name        string `json:"name" gorm:"not null;size:100"`
	Description string `json:"description" gorm:"size:500"`
	Type        string `json:"type" gorm:"not null;size:50;default:knowledge"` // knowledge类型
	Status      string `json:"status" gorm:"default:active"`                   // active, inactive, training
	Config      string `json:"config" gorm:"type:jsonb"`                       // JSON配置
	Model       string `json:"model" gorm:"not null;size:100"`                 // AI模型名称
	Version     string `json:"version" gorm:"default:1.0.0"`

	// 知识百科特定字段
	Categories    string `json:"categories" gorm:"type:jsonb"`     // 支持的知识分类
	Languages     string `json:"languages" gorm:"type:jsonb"`      // 支持的语言
	Difficulty    string `json:"difficulty" gorm:"size:20"`        // easy, medium, hard, expert
	MaxQuestions  int    `json:"max_questions" gorm:"default:100"` // 最大问题数
	ResponseStyle string `json:"response_style" gorm:"size:50"`    // detailed, concise, educational

	CreatedBy uint           `json:"created_by"`
	UpdatedBy uint           `json:"updated_by"`
	CreatedAt time.Time      `json:"created_at"`
	UpdatedAt time.Time      `json:"updated_at"`
	DeletedAt gorm.DeletedAt `json:"-" gorm:"index"`

	// 关联
	Sessions  []KnowledgeSession   `json:"sessions,omitempty" gorm:"foreignKey:AgentID"`
	Questions []KnowledgeQuestion  `json:"questions,omitempty" gorm:"foreignKey:AgentID"`
	Analytics []KnowledgeAnalytics `json:"analytics,omitempty" gorm:"foreignKey:AgentID"`
}

// KnowledgeSession 知识问答会话
type KnowledgeSession struct {
	ID        uint       `json:"id" gorm:"primarykey"`
	AgentID   uint       `json:"agent_id" gorm:"not null"`
	SessionID string     `json:"session_id" gorm:"not null;uniqueIndex;size:100"`
	UserID    string     `json:"user_id" gorm:"size:100"`
	Topic     string     `json:"topic" gorm:"size:200"`        // 主要讨论话题
	Category  string     `json:"category" gorm:"size:100"`     // 知识分类
	Status    string     `json:"status" gorm:"default:active"` // active, completed, expired
	StartedAt time.Time  `json:"started_at"`
	EndedAt   *time.Time `json:"ended_at"`
	CreatedAt time.Time  `json:"created_at"`
	UpdatedAt time.Time  `json:"updated_at"`

	Agent KnowledgeAgent `json:"agent,omitempty" gorm:"foreignKey:AgentID"`
}

// KnowledgeQuestion 知识问题记录
type KnowledgeQuestion struct {
	ID         uint   `json:"id" gorm:"primarykey"`
	AgentID    uint   `json:"agent_id" gorm:"not null"`
	SessionID  string `json:"session_id" gorm:"size:100"`
	Question   string `json:"question" gorm:"type:text;not null"`
	Answer     string `json:"answer" gorm:"type:text"`
	Category   string `json:"category" gorm:"size:100"`  // 问题分类
	Difficulty string `json:"difficulty" gorm:"size:20"` // 问题难度
	Language   string `json:"language" gorm:"size:10"`   // 问答语言

	// AI相关字段
	ModelUsed    string  `json:"model_used" gorm:"size:100"` // 使用的AI模型
	TokensUsed   int     `json:"tokens_used"`                // 消耗的tokens
	ResponseTime int     `json:"response_time"`              // 响应时间(ms)
	Confidence   float32 `json:"confidence"`                 // 置信度

	// 用户反馈
	Rating    *int   `json:"rating"`                    // 1-5星评分
	Feedback  string `json:"feedback" gorm:"type:text"` // 用户反馈
	IsHelpful *bool  `json:"is_helpful"`                // 是否有帮助

	CreatedAt time.Time `json:"created_at"`
	UpdatedAt time.Time `json:"updated_at"`

	Agent KnowledgeAgent `json:"agent,omitempty" gorm:"foreignKey:AgentID"`
}

// KnowledgeAnalytics 知识百科分析数据
type KnowledgeAnalytics struct {
	ID      uint      `json:"id" gorm:"primarykey"`
	AgentID uint      `json:"agent_id" gorm:"not null"`
	Date    time.Time `json:"date" gorm:"not null"`

	// 使用统计
	TotalQuestions  int `json:"total_questions"`   // 总问题数
	TotalSessions   int `json:"total_sessions"`    // 总会话数
	UniqueUsers     int `json:"unique_users"`      // 独立用户数
	AvgResponseTime int `json:"avg_response_time"` // 平均响应时间

	// 分类统计
	CategoryStats   string `json:"category_stats" gorm:"type:jsonb"`   // 分类统计
	DifficultyStats string `json:"difficulty_stats" gorm:"type:jsonb"` // 难度统计
	LanguageStats   string `json:"language_stats" gorm:"type:jsonb"`   // 语言统计

	// 质量统计
	AvgRating      float32 `json:"avg_rating"`      // 平均评分
	HelpfulRate    float32 `json:"helpful_rate"`    // 有用率
	CompletionRate float32 `json:"completion_rate"` // 完成率

	// 成本统计
	TotalTokens int     `json:"total_tokens"` // 总tokens消耗
	TotalCost   float64 `json:"total_cost"`   // 总成本

	CreatedAt time.Time `json:"created_at"`
	UpdatedAt time.Time `json:"updated_at"`

	Agent KnowledgeAgent `json:"agent,omitempty" gorm:"foreignKey:AgentID"`
}

// KnowledgeCategory 知识分类
type KnowledgeCategory struct {
	ID          uint   `json:"id" gorm:"primarykey"`
	Name        string `json:"name" gorm:"not null;size:100"`
	NameEn      string `json:"name_en" gorm:"size:100"`
	Description string `json:"description" gorm:"size:500"`
	Icon        string `json:"icon" gorm:"size:100"`
	Color       string `json:"color" gorm:"size:20"`
	ParentID    *uint  `json:"parent_id"`                   // 父分类ID
	Level       int    `json:"level" gorm:"default:1"`      // 分类层级
	SortOrder   int    `json:"sort_order" gorm:"default:0"` // 排序
	IsActive    bool   `json:"is_active" gorm:"default:true"`

	CreatedAt time.Time `json:"created_at"`
	UpdatedAt time.Time `json:"updated_at"`

	// 关联
	Parent   *KnowledgeCategory  `json:"parent,omitempty" gorm:"foreignKey:ParentID"`
	Children []KnowledgeCategory `json:"children,omitempty" gorm:"foreignKey:ParentID"`
}

// TableName 设置表名
func (KnowledgeAgent) TableName() string {
	return "knowledge_agents"
}

func (KnowledgeSession) TableName() string {
	return "knowledge_sessions"
}

func (KnowledgeQuestion) TableName() string {
	return "knowledge_questions"
}

func (KnowledgeAnalytics) TableName() string {
	return "knowledge_analytics"
}

func (KnowledgeCategory) TableName() string {
	return "knowledge_categories"
}
